#ifndef _USUARIOS_DAO_H__
#define _USUARIOS_DAO_H__

#include <mysql++.h>
#include "Usuario.h"
#include "PartidaPersistente.h"
#include "Lista.h"
#include <iostream>
#include <fstream>
#include <string>

using namespace std;
/*
	Singleton para acceso a tabla de 'usuarios' y consulta de datos
*/
class UsuariosDAO {

private:

	static UsuariosDAO* instancia;

	static const char* servidor;
	static const int puerto;
	static const char* nombreBD;
	static const char* nombreTabla;
	static const char* usuario;
	static const char* password;

protected:

	UsuariosDAO(void);

	Lista<Usuario*>* cargarUsuarios(vector<mysqlpp::Row> v);
	Lista<PartidaPersistente*>* cargarPartidas(vector<mysqlpp::Row> v);

public:

	~UsuariosDAO(void);

	static UsuariosDAO* getInstancia();

	Lista<Usuario*>* getMejoresUsuariosPorPartidasGanadas();

	Lista<Usuario*>* getTodosLosUsuarios();

	Lista<Usuario*>* getMejoresUsuariosPorPartidasJugadas();

	Lista<Usuario*>* getMejoresUsuariosPorPuntos();

	Lista<Usuario*>* getMejoresUsuariosPorTiempoJugado();

	long long contarUsuarios();

	void insertarNuevoUsuario(string nombre, string password);

	void actualizarEstadisticaDeJugador(string nombre, int puntosGanados, bool haGanado, bool haEmpatado, int tiempoJugado);

	Lista<PartidaPersistente*>* getPartidasEntreUsuarios(string usuario1, string usuario2);

	void insertarNuevaPartida(string nombreJugador1, string nombreJugador2, string nombreGanador, int puntos1, int puntos2, int tiempoJugado); 
};

#endif